Recent advances in computer performance have enabled graphic systems to provide more realistic graphical images using personal computers, home video game computers, handheld devices, and the like. In such graphic systems, a number of procedures are executed to “render” or draw graphic primitives to the screen of the system. A “graphic primitive” is a basic component of a graphic picture, such as a point, line, polygon, or the like. Rendered images are formed with combinations of these graphic primitives. Many procedures may be utilized to perform 3-D graphics rendering.
Specialized graphics processing units (e.g., GPUs, etc.) have been developed to optimize the computations required in executing the graphics rendering procedures. The GPUs are configured for high-speed operation and typically incorporate one or more rendering pipelines. Each pipeline includes a number of hardware-based functional units that are optimized for high-speed execution of graphics instructions/data, where the instructions/data are fed into the front end of the pipeline and the computed results emerge at the back end of the pipeline. The hardware-based functional units, cache memories, firmware, and the like, of the GPU are optimized to operate on the low-level graphics primitives (e.g., comprising “points”, “lines”, “triangles”, etc.) and produce real-time rendered 3-D images.
The real-time rendered 3-D images are generated using raster display technology. Raster display technology is widely used in computer graphics systems, and generally refers to the mechanism by which the grid of multiple pixels comprising an image are influenced by the graphics primitives. For each primitive, a typical rasterization system generally steps from pixel to pixel and determines whether or not to “render,” or write a given pixel into a frame buffer or pixel map, as per the contribution of the primitive. This, in turn, determines how to write the data to the display buffer representing each pixel. Various traversal algorithms and various rasterization methods have been developed for computing from a graphics primitive based description to a pixel based description (e.g., rasterizing pixel to pixel per primitive) in a way such that all pixels within the primitives comprising a given 3-D scene are covered.
Once the primitives are rasterized into their constituent pixels, these pixels are then processed in pipeline stages subsequent to the rasterization stage where the rendering operations are performed. Generally, these rendering operations assign a color to each of the pixels of a display in accordance with the degree of coverage of the primitives comprising a scene. The per pixel color is also determined in accordance with texture map information that is assigned to the primitives, lighting information, and the like.
A problem exists however with the ability of prior art 3-D rendering architectures to scale to handle the increasingly complex 3-D scenes of today's applications. Open GL is one of the widely used industry standard APIs (Application Programming Interface) used for creating 3D applications. Graphics hardware has developed specialized hardware to specifically accelerate OpenGL based processing. OpenGL hardware acceleration has to support a variety of drawing primitive types. Such primitive types include points, lines, and triangles.
One typical prior art solution is to create each of the types of primitives internally by using a single graphics primitive, most commonly a triangle. A point, for example, which has non-zero height and width, is drawn out of two triangles. This process is inefficient, however, for at least 2 reasons: 1) power and time are consumed by communicating the two triangles from the setup unit to the raster unit of the graphics processor; and 2) rasterization of triangles usually has inefficiencies. The power and time requirements can be a problem if many relatively small points are being drawn. The rasterization inefficiencies are caused by partially covered rasterization tiles, intersections with scissor and window boundaries, and sparse coverage of sampling points. This problem is exacerbated if multisampling is used to support, for example, anti-aliasing algorithms. The rasterization drawbacks also present obstacles in the scaling process, where engineers continually strive to improve the performance and the efficiency of graphics processor architectures.
Thus, a need exists for a rasterization process that can scale as graphics application needs require and provide added performance without incurring penalties such as increased power consumption and/or reduced fabrication yield.